私の適当なので良ければ...
package Plagger::Plugin::Publish::GooBookmark;
use strict;
use base qw( Plagger::Plugin );
use Encode;
use Time::HiRes qw(sleep);
use URI;
use Plagger::Mechanize;
sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
'publish.entry' => \&add_entry,
'publish.init' => \&initialize,
);
}
sub initialize {
my $self = shift;
unless ($self->{mech}) {
my $mech = Plagger::Mechanize->new;
$mech->agent_alias('Windows IE 6');
$mech->quiet(1);
$self->{mech} = $mech;
}
$self->login_goo_bookmark;
}
sub add_entry {
my ($self, $context, $args) = @_;
my @tags = @{$args->{entry}->tags};
my $tag_string = @tags ? join(',', @tags) : '';
my $summary;
if ($self->conf->{post_body}) {
$summary = encode('utf-8', $args->{entry}->body_text); # xxx should be summary
}
my $uri = URI->new('http://bookmark.goo.ne.jp/add/detail/');
$uri->query_form(
url => $args->{entry}->link,
);
my $res = eval { $self->{mech}->get($uri->as_string) };
if ($res && $res->is_success) {
eval {
my $button = $self->{mech}->form_name('boomarkEdit')->find_input('addDetail') || 'editEdit';
$self->{mech}->submit_form(
form_name => 'boomarkEdit',
fields => {
title => encode('utf-8', $args->{entry}->title),
keywordlist => encode('utf-8', $tag_string),
comment => $summary,
publicno => 0,
point => $self->conf->{rate} || 1,
},
button => $button
)
};
if ($@) {
$context->log(info => "can't submit: " . $@);
} else {
$context->log(info => "Post entry success.");
}
} else {
$context->log(info => "fail to bookmark HTTP Status: " . $res->code);
}
my $sleeping_time = $self->conf->{interval} || 3;
$context->log(info => "sleep $sleeping_time.");
sleep( $sleeping_time );
}
sub login_goo_bookmark {
my $self = shift;
unless ($self->conf->{username} && $self->conf->{password}) {
Plagger->context->log(error => 'set your username and password before login.');
}
my $res = $self->{mech}->get('https://login.mail.goo.ne.jp/certify-cgi/login.cgi?site=bookmark.goo.ne.jp');
$self->{mech}->submit_form(
form_name => 'f1',
fields => {
uname => $self->conf->{username},
pass => $self->conf->{password},
},
);
}
1;
__END__
=head1 NAME
Plagger::Plugin::Publish::GooBookmark - Post to goo bookmark automatically
=head1 SYNOPSIS
- module: Publish::GooBookmark
config:
username: your-username
password: your-password
interval: 2
post_body: 1
#rate: 3
=head1 DESCRIPTION
This plugin automatically posts feed updates to goo bookmark
L<http://bookmark.goo.ne.jp/>. It supports automatic tagging as well. It
might be handy for synchronizing delicious feeds into goo bookmark.
=head1 AUTHOR
Yasuhiro Matsumoto
=head1 SEE ALSO
L<Plagger>, L<Plagger::Plugin::Publish::LivedoorClip>, L<Plagger::Mechanize>
=cut
レート(GooBookmarkでいうpoint)を設定出来るようにした。それと、Publish::LivedoorClipで重複登録の際に、エラーが出ていたので、パッチを書いた。こちらもレートを変えられるようにした。
Index: LivedoorClip.pm
===================================================================
--- LivedoorClip.pm (revision 1976)
+++ LivedoorClip.pm (working copy)
@@ -46,12 +46,17 @@
tags => encode('utf-8', $tag_string),
title => encode('utf-8', $args->{entry}->title),
notes => $summary,
+ rate => $self->conf->{rate} || 1,
);
my $add_url = $uri->as_string;
my $res = eval { $self->{mech}->get($add_url) };
if ($res && $res->is_success) {
- eval { $self->{mech}->submit_form(form_name => 'clip') };
+ eval {
+ my $form_name = 'clip';
+ $form_name = 'edit_form' if $self->{mech}->form_name($form_name);
+ $self->{mech}->submit_form(form_name => $form_name)
+ };
if ($@) {
$context->log(info => "can't submit: " . $args->{entry}->link);
} else {
otsuneさんと、Publish::LivedoorClipのAUTHORさんがOKならば、それぞれCodeReposに上げる予定です。しかしまぁ、SBM同期用YAMLがエライ事になってきた。
global:
assets_path: /home/user/plagger/assets/
timezone: Asia/Tokyo
log:
level: info
plugins:
- module: Subscription::Config
config:
feed:
- http://b.hatena.ne.jp/[hatena user]/atomfeed
- module: Filter::AtomLinkRelated
- module: Filter::Rule
rule:
module: Deduped
path: /tmp/syncsbm.db
- module: Publish::Delicious
config:
username: xxxx
password: xxxx
interval: 2
post_body: 1
- module: Publish::LivedoorClip
config:
livedoor_id: xxxx
password: xxxx
interval: 2
post_body: 1
rate: 3
- module: Publish::Buzzurl
config:
usermail: xxxx
password: xxxx
interval: 2
post_body: 1
- module: Publish::GooBookmark
config:
username: xxxx
password: xxxx
interval: 2
post_body: 1
rate: 3
追記1otsuneさんのいうWWW::Mechanizeで書いてしまった...
追記2
otsuneさんからツッコミの有難い頂いたので、修正後にCodeReposにアップします。otsuneさんありがとうございました。
追記3
さらにotsuneさんからツッコミの有難い頂いたので、今後は慎重に行きます。苦笑